#include <bits/stdc++.h>
using namespace std;

template<typename T,int s>
struct X {
     X(){
         cout << "X 1" << endl;
     }
};

template<int s>
struct X<const char *,s> { // 1 明确指定哪种类型
     X(){
         cout << "X 2" << endl;
     }
};

template<typename T> // 1 明确指定值
struct X<T,10> {
     X(){
         cout << "X 3" << endl;
     }
};

// 2 部分指定某种类型
template<typename T,int s>
struct X<T*,s> { // 某种指针,特化了指针类型 2
     X(){
         cout << "X 4" << endl;
     }
};

template<typename T,int s>
struct X<const T,s> { // 某种const,特化了const 2
     X(){
         cout << "X 6" << endl;
     }
};

/*
 //特化的模板参数不能有默认值
template<typename T = char> 
struct X<T,10> {
     X(){
         cout << "X 3" << endl;
     }
};
*/



int main(){
    X<int,2> a;
    X<const char *,2> b; // 3 更加匹配
    X<int *,2> bb;

    X<int,10> c;
    return 0;
}
